package com.dev.widget.ui;

import com.dev.widget.util.widget.WidgetAttrs;
import ohos.agp.components.AttrSet;
import ohos.agp.components.Component;
import ohos.agp.components.ComponentTreeObserver;
import ohos.agp.components.NestedScrollView;

import ohos.app.Context;

public class CustomNestedScrollView extends NestedScrollView implements Component.ScrolledListener {

    private WidgetAttrs mWidgetAttrs;
    // 滑动监听回调
    private ScrollCallback mCallback = null;

    public CustomNestedScrollView(Context context) {
        super(context);
    }

    public CustomNestedScrollView(Context context, AttrSet attrSet) {
        super(context, attrSet);
    }

    public CustomNestedScrollView(Context context, AttrSet attrSet, String styleName) {
        super(context, attrSet, styleName);
    }

    @Override
    public void onContentScrolled(Component component, int left, int top, int oldLeft, int oldTop) {
        if (mCallback != null) {
            mCallback.onScrollChanged(left, top, oldLeft, oldTop);
        }
    }

    /**
     * detail: 滑动监听回调
     * @author Ttt
     */

    /**
     * 获取 View 最大显示宽度
     * @return View 最大显示宽度
     */
    public int getMaxWidth() {
        return mWidgetAttrs.getMaxWidth();
    }

    /**
     * 设置 View 最大显示宽度
     * @param maxWidth View 最大显示宽度
     * @return {@link CustomNestedScrollView}
     */
    public CustomNestedScrollView setMaxWidth(int maxWidth) {
        mWidgetAttrs.setMaxWidth(maxWidth);
        return this;
    }

    /**
     * 获取 View 最大显示高度
     * @return View 最大显示高度
     */
    public int getMaxHeight() {
        return mWidgetAttrs.getMaxHeight();
    }

    /**
     * 设置 View 最大显示高度
     * @param maxHeight View 最大显示高度
     * @return {@link CustomNestedScrollView}
     */
    public CustomNestedScrollView setMaxHeight(int maxHeight) {
        mWidgetAttrs.setMaxHeight(maxHeight);
        return this;
    }

    /**
     * 是否允许滑动
     * @return {@code true} yes, {@code false} no
     */
    public boolean isSlide() {
        return mWidgetAttrs.isSlide();
    }

    /**
     * 设置是否允许滑动
     * @param isSlide {@code true} yes, {@code false} no
     * @return {@link CustomNestedScrollView}
     */
    public CustomNestedScrollView setSlide(boolean isSlide) {
        mWidgetAttrs.setSlide(isSlide);
        return this;
    }

    /**
     * 切换滑动控制状态
     * @return {@link CustomNestedScrollView}
     */
    public CustomNestedScrollView toggleSlide() {
        mWidgetAttrs.toggleSlide();
        return this;
    }

    /**
     * 设置滑动监听回调
     * @param callback {@link ScrollCallback}
     * @return {@link CustomNestedScrollView}
     */
    public CustomNestedScrollView setScrollCallback(ScrollCallback callback) {
        this.mCallback = callback;
        return this;
    }

    /**
     * detail: 滑动监听回调
     * @author Ttt
     */
    public interface ScrollCallback {

        /**
         * 滑动改变通知
         * @param left    距离左边距离
         * @param top     距离顶部距离
         * @param oldLeft 旧的 ( 之前 ) 距离左边距离
         * @param oldTop  旧的 ( 之前 ) 距离顶部距离
         */
        void onScrollChanged(
                int left,
                int top,
                int oldLeft,
                int oldTop
        );
    }
}
